#include <iostream>
#include <future>
#include <thread>

int compute(int x, int y) {
    return x + y;
}

int main() {
    // packaged_task 将可调用对象（函数、lambda、bind 表达式、函数对象等）包装成一个异步任务，并与该任务的返回值或异常关联到一个 std::future 上
    // 1. 创建 packaged_task，包装函数:  匿名函数签名
    std::packaged_task<int(int, int)> task(compute);

    // 2. 获取与任务关联的 future
    std::future<int> result = task.get_future();

    // 3. 移动任务到线程中执行
    std::thread t(std::move(task), 3, 4);

    // 4. 等待并获取结果
    std::cout << "Result: " << result.get() << std::endl;

    t.join();
    return 0;
}